#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

#define _GNU_SOURCE
//不定参宏函数的使用
#define LOG(fmt, ...) printf("[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__);

//C语言不定参函数的使用， 不定参数据的访问
void printNum(int count, ...)
{
    va_list ap;//指针
    va_start(ap, count);//获取指定不定参数的起始地址，即获取count参数之后的第一个参数的起始地址
    //获取count个不定参数
    for(int i = 0; i < count; i++)
    {
        int num = va_arg(ap,int);
        printf("param[%d]:%d\n", i, num);
    }
    va_end(ap);//将ap指针置空
}
//自己实现一个printf函数
void myprintf(const char* fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    char* res;
    int ret = vasprintf(&res, fmt, ap);
    if(ret != -1)
    {
        printf(res);
        free(res);//这里一定要记得把空间释放

        
    }
    va_end(ap);//将ap指针置空
}


int main()
{
    LOG("今天天气很好");
    printNum(2, 666, 777);
    printNum(5, 1, 2, 3, 4, 5);
    myprintf("%s-%d\n", "今天天气很好", 666);
    myprintf("今天心情很好");

    return 0;
}